package demo27;

public class Test {

    public static void main(String[] args) {
        int[] nums = {0,1,2,2,3,0,4,2};
        System.out.println("size = "+removeElement(nums, 3));
        for (int num : nums) {
            System.out.print(num+" ");
        }
    }


    public static int removeElement(int[] nums, int val) {
        //保存结果集长度
        int length = 0;
        //处理特殊情况，数组长度为1和0的时候的情况
        if(nums.length == 1 && nums[0] != val){
            return 1;
        }else if(nums.length == 0){
            return 0;
        }
        //定义左右指针
        int left = 0,right = nums.length-1;
        while(left <= right){
            //当左右指针相遇并分离那一刻，跳出循环
            //先在左指针中寻找val
            while(left <= right){
                //左指针比较的终点是右指针的位置（包括右指针，因为右指针的值还没判断过）
                if(nums[left] == val){
                    //左指针找到val，在此处挖坑，并将左指针往右移动一步
                    left++;
                    break;
                }
                //此次左指针指向的数不是val，代表有效数字，长度也要增加
                left++;
                length++;
            }
            while(left <= right){
                //右指针比较的终点是左指针的位置（包括左指针，因为左指针的值还没判断过）
                if(nums[right] != val){
                    //右指针找到非val的数，填充进左指针前一步挖的坑中，并将右指针往左移动一步
                    nums[left-1] = nums[right];
                    //此次右指针指向的数不是val，代表有效数字，长度也要增加
                    length++;
                    right--;
                    break;
                }
                right--;
            }

        }
        return length;
    }

}
